/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package peticionweb.control;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import peticionweb.control.exceptions.PreexistingEntityException;
import peticionweb.logica.entidad.Cucar1m;
import peticionweb.logica.entidad.Cuyea1m;
import peticionweb.vista.PeticionWeb;

/**
 *
 * @author icardenas
 */
public class controladorPrincipal {

    public controladorPrincipal() {
    }

    public boolean cargarEspecialidad(String _url) throws MalformedURLException, IOException, JDOMException {
        PeticionPost post;
        post = new PeticionPost(_url);
        String respuesta = post.getRespueta();
        respuesta = respuesta.substring(respuesta.lastIndexOf("<select name=\"esp\" id=\"esp\">"), respuesta.indexOf("</select>", respuesta.lastIndexOf("<select name=\"esp\" id=\"esp\">")) + 10);
        respuesta = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(respuesta);
        SAXBuilder builder = new SAXBuilder();
        Document document = builder.build(
                new ByteArrayInputStream(respuesta.getBytes()));
        Cucar1mJpaController facade = new Cucar1mJpaController();
        for (Element element : document.getRootElement().getChildren()) {
            Cucar1m carrera = new Cucar1m();
            carrera.setCodca(Integer.parseInt(element.getAttribute("value").getValue()));
            carrera.setNomca(element.getValue());
            if (facade.findCucar1m(carrera.getCodca()) == null) {
                System.out.println("Agregado " + element.getAttribute("value").getValue() + " " + element.getValue());
                facade.create(carrera);
            } else {
                System.out.println("Ya existe " + element.getAttribute("value").getValue() + " " + element.getValue());
            }
        }
        return false;
    }

    public boolean cargarPeriodos(String _url) throws MalformedURLException, IOException, JDOMException, PreexistingEntityException, Exception {
        PeticionPost post;
        post = new PeticionPost(_url);
        String respuesta = post.getRespueta();
        respuesta = respuesta.substring(respuesta.lastIndexOf("<select name=\"periodo\">"), respuesta.indexOf("</select>", respuesta.lastIndexOf("<select name=\"periodo\">")) + 10);
//        System.out.println(respuesta);
        respuesta = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(respuesta).replace("<select name=\"periodo\">", "").replace("</select>", "");
        String[] nodos = respuesta.split("<option value=");
        Cuyea1mJpaController facade = new Cuyea1mJpaController();
        for (String string : nodos) {
            string = string.replace("</option>", "");

            String valores[] = string.split(">");
            Cuyea1m anho = new Cuyea1m(valores[0]);
            if (valores.length > 1) {

                anho.setPerye(valores[1]);
                if (facade.findCuyea1m(anho.getIdeye()) == null) {
                    System.out.println("Agregado " + valores[0] + " " + valores[1]);
                    facade.create(anho);
                } else {
                    System.out.println("Ya existe Periodo " + valores[0] + " " + valores[1]);
                }
            }

        }

        return false;
    }

    public boolean cargarResultados(String _url) throws MalformedURLException, UnsupportedEncodingException, IOException {
        Cuyea1mJpaController facade = new Cuyea1mJpaController();
        List<Cuyea1m> periodos = facade.findCuyea1mEntities();
        //Obtener carrera
        Cucar1mJpaController facade2 = new Cucar1mJpaController();
        List<Cucar1m> carreras = facade2.findCucar1mEntities();

        for (Cucar1m carrera : carreras) {
            for (Cuyea1m periodo : periodos) {

                PeticionPost post = new PeticionPost(_url);
                post.add("esp", String.valueOf(carrera.getCodca()));
                post.add("periodo", periodo.getIdeye());
                String respuesta = post.getRespueta();
                respuesta = respuesta.substring(respuesta.lastIndexOf("<table"), respuesta.lastIndexOf("</table"));
                String[] nodos = respuesta.split("<tr");
                int j = 0;
                for (String string : nodos) {
                    if (j > 1 && j < 3) {

                        String[] columnas = string.split("<td nowrap");
                        int i = 0;
                        for (String string1 : columnas) {
                            if (i == 0) {
                                string1 = string1.replace("class=\"text-cua\" onmouseover=\"this.bgColor = '#3399CC'\"  onmouseout=\"this.bgColor =''\"   style= \"color: #FF0000\"   >", "");
                                string1 = string1.replace("class=\"text-cua\" onmouseover=\"this.bgColor = '#3399CC'\"  onmouseout=\"this.bgColor =''\"   style= \"color: #000000\"   >", "");
                                System.out.println(string1);
                            } else if (i == 13) {
                                System.out.print(string1.replace("align='center'>", "").replace("</td></tr>", "").replace(">", ""));

                            } else if (i < 4) {

                                System.out.print(string1.replace(">", ""));
                                string1 = string1.replace(">", "").trim();
                                string1 = string1 + ".jpg";
                                if (i == 2) {
                                    try {
                                        descargarImagen(string1.replace("V", ""), String.valueOf(carrera.getCodca())+"/"+periodo.getIdeye());
                                    } catch (NoSuchAlgorithmException ex) {
                                        System.out.println("No paso nada");
                                        Logger.getLogger(PeticionWeb.class.getName()).log(Level.SEVERE, null, ex);
                                    }
                                }
                            }
                            System.out.print(" ");
                            i++;
                        }
                    }
                    j++;
                }
            }
        }
        return false;
    }

    public int descargarImagen(String _url, String _dir) throws NoSuchAlgorithmException {
        try {
            // Carga del fichero que tiene los certificados de los servidores en
            // los que confiamos.
            InputStream fileCertificadosConfianza = new FileInputStream(new File(
                    "x.keystore"));
            KeyStore ksCertificadosConfianza = KeyStore.getInstance(KeyStore
                    .getDefaultType());
            ksCertificadosConfianza.load(fileCertificadosConfianza,
                    "ivan123".toCharArray());
            fileCertificadosConfianza.close();

            // Ponemos el contenido en nuestro manager de certificados de
            // confianza.
            TrustManagerFactory tmf = TrustManagerFactory
                    .getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(ksCertificadosConfianza);

            // Creamos un contexto SSL con nuestro manager de certificados en los
            // que confiamos.
            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, tmf.getTrustManagers(), null);
            SSLSocketFactory sslSocketFactory = context.getSocketFactory();

            // Abrimos la conexión y le pasamos nuestro contexto SSL
            StringBuilder stringBuilder = new StringBuilder("https://control.unet.edu.ve/imagenes/FotosE/V").append(_url);

            URL url = new URL(stringBuilder.toString());
            URLConnection conexion = url.openConnection();
            ((HttpsURLConnection) conexion).setSSLSocketFactory(sslSocketFactory);

            // Ya podemos conectar y leer
            conexion.connect();
            InputStream is = conexion.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            char[] buffer = new char[1000];
            int leido;
             File file=new File(_dir);
            if(file.exists()==false){
                
                file.mkdirs();
            }
            OutputStream os = new FileOutputStream(_dir + "/" + _url);

            byte[] b = new byte[2048];
            int length;

            while ((length = is.read(b)) != -1) {
                os.write(b, 0, length);
            }

            is.close();
            os.close();
        }
        catch(Exception e){
            System.err.println("No se Pudo Cargar "+_url+" "+e.getMessage());
        }
        return 0;
    }
}
